#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QFileDialog>
#include <QDir>
#include <QFileInfoList>
#include <QStringList>
#include <QMap>
#include <QVector>
#include <algorithm>
#include <QStandardPaths>
#include <QProcess>
#include <QDebug>
#include <QMessageBox>
#include <QJsonArray>
#include <QJsonDocument>
#include <QKeyEvent>
#include <QCoreApplication>
#include <QTableWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 切换至界面0
    void on_pushButton_readAndConvert_clicked();

    // 切换至界面1
    void on_pushButton_reconstructImage_clicked();

    // 改变pushButton_readconvert的内容
    void on_comboBox_currentIndexChanged(int index);

    // 读取并转换文件
    void on_pushButton_readconvert_clicked();

    void on_tableWidget_filesInfo_cellDoubleClicked(int row, int column);
    // 随机选取文件
    void on_pushButton_randomSelectFiles_clicked();
    // 选择pt文件
    void on_pushButton_selectPtFile_clicked();

    // 重建图像
    void on_pushButton_reconstructImage_2_clicked();

    void on_comboBox_reconstructImage_currentIndexChanged(int index);

private:
    Ui::MainWindow *ui;
    QMap<int, QString> addedFiles;
    QMap<QString, QString> fileNameToAbsolutePath; // 存储文件名和对应 .txt 文件的绝对路径
    QString ptFilePath;

    // 读取并转换文件
    void readAndConvertFiles(int index);

    void convertPtuToTxt(const QString &sourceFilePath, const QString &outputFilePath);

    void addSelectedItemToListWidget(QTableWidgetItem *item);

    // 调用重建图像程序
    QString callPythonExecutable(const QString &fileListJson, int pulseCount, const QString &pictureName);

    // 设置图像
    void setUpPicture(QString pictureName, QLabel *label);

protected:
    void keyPressEvent(QKeyEvent *event) override;
};
#endif // MAINWINDOW_H
